From f79337324f87f40de8e91e06dde70ccccb176e00 Mon Sep 17 00:00:00 2001 From: Jakub Matraszek Date: Sun, 14 May 2017 22:47:24 +0200 Subject: [PATCH] Change inferring bin's name logic --- src/cargo/util/toml.rs | 18 ++++++++++-- tests/build.rs | 62 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/src/cargo/util/toml.rs b/src/cargo/util/toml.rs index 771f48ddf..c9803cf91 100644 --- a/src/cargo/util/toml.rs +++ b/src/cargo/util/toml.rs @@ -1422,11 +1422,25 @@ fn inferred_bin_path(bin: &TomlBinTarget, } return Path::new("src").join("bin").join(&format!("main.rs")).to_path_buf() + } + + // bin_len > 1 + let path = Path::new("src").join("bin").join(&format!("{}.rs", bin.name())); + if package_root.join(&path).exists() { + return path.to_path_buf() + } + + let path = Path::new("src").join(&format!("{}.rs", bin.name())); + if package_root.join(&path).exists() { + return path.to_path_buf() + } + let path = Path::new("src").join("bin").join(&format!("main.rs")); + if package_root.join(&path).exists() { + return path.to_path_buf() } - // here we have multiple bins, so they are expected to be located inside src/bin - Path::new("src").join("bin").join(&format!("{}.rs", bin.name())).to_path_buf() + return Path::new("src").join(&format!("main.rs")).to_path_buf() } fn build_profiles(profiles: &Option) -> Profiles { diff --git a/tests/build.rs b/tests/build.rs index 0e76f569d..13ab07661 100644 --- a/tests/build.rs +++ b/tests/build.rs @@ -3010,6 +3010,68 @@ fn run_proper_binary_main_rs() { execs().with_status(0)); } +#[test] +fn run_proper_alias_binary_from_src() { + let p = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + authors = [] + version = "0.0.0" + [[bin]] + name = "foo" + [[bin]] + name = "bar" + "#) + .file("src/foo.rs", r#" + fn main() { + println!("foo"); + } + "#).file("src/bar.rs", r#" + fn main() { + println!("bar"); + } + "#); + + assert_that(p.cargo_process("build") + .arg("--all"), + execs().with_status(0) + ); + assert_that(process(&p.bin("foo")), + execs().with_status(0).with_stdout("foo\n")); + assert_that(process(&p.bin("bar")), + execs().with_status(0).with_stdout("bar\n")); +} + +#[test] +fn run_proper_alias_binary_main_rs() { + let p = project("foo") + .file("Cargo.toml", r#" + [package] + name = "foo" + authors = [] + version = "0.0.0" + [[bin]] + name = "foo" + [[bin]] + name = "bar" + "#) + .file("src/main.rs", r#" + fn main() { + println!("main"); + } + "#); + + assert_that(p.cargo_process("build") + .arg("--all"), + execs().with_status(0) + ); + assert_that(process(&p.bin("foo")), + execs().with_status(0).with_stdout("main\n")); + assert_that(process(&p.bin("bar")), + execs().with_status(0).with_stdout("main\n")); +} + #[test] fn run_proper_binary_main_rs_as_foo() { let p = project("foo") -- 2.30.2